7314
12907
Chiuso. Questa domanda richiede dettagli o chiarezza. Attualmente non accetta risposte.
Vuoi migliorare questa domanda? Aggiungi dettagli e chiarisci il problema modificando questo post.
Chiuso 1 anno fa.
Migliora questa domanda
Sto eseguendo una verifica del codice e voglio ottenere i primi 3 valori dal mio array specificando l'indice iniziale e ottenendo solo i primi (3 o possono essere di qualsiasi lunghezza) valori dall'indice iniziale.
Ho provato questo codice e funziona ma la struttura del codice è troppo lunga, quindi come posso renderlo più breve in modo che sia facile da capire.
int n = 10;
doppia firma = nuova doppia [] {1, 1, 1};
double [] ret = new double [n];
doppia somma = 0;
ret [0] = firma [0];
ret [1] = firma [1];
ret [2] = firma [2];
int x, i;
for (i = 0; i 
                                
Usando LINQ puoi provare qualcosa di simile:
valori var = array.Skip (indice)
.Prese)
.ToArray ();
Dove index è l'indice del primo articolo en il numero degli articoli che vuoi scegliere.
Per esempio. https://dotnetfiddle.net/Pk1rwY
Come nota a margine. L'uso di LINQ non significa che il codice sarebbe più veloce. Sarebbe più compatto / leggibile, ecc. Per valutare quanto sia performante il tuo codice devi usare qualcosa come BenchmarkDotNet.
|
Nessuna soluzione Linq:
private static T [] Extract  (T [] source, int fromIndex, int length) {
if (null == sorgente)
lancia una nuova ArgumentNullException (nameof (source));
altrimenti se (daIndex <0)
lancia una nuova ArgumentOutOfRangeException (nameof (fromIndex),
"Dall'indice deve essere non negativo");
altrimenti se (lunghezza <0)
lancia una nuova ArgumentOutOfRangeException (nameof (length),
"La lunghezza deve essere non negativa");
if (fromIndex> = source.Length || length == 0)
restituisce nuovo T [0];
T [] risultato = nuovo T [Math.Min (length, source.Length - fromIndex)];
Array.Copy (source, fromIndex, risultato, 0, result.Length);
risultato di ritorno;
}
Poi
doppia [] firma = nuova doppia [] {0, 1, 2, 3, 4, 5};
double [] ret = Extract (firma, 3, 2);
Console.Write (string.Join (",", ret));
Risultato:
3, 4
|
Dalla tua domanda, devi sfruttare gli operatori .Take e .Skip.
var result = array.Skip (startingIndex) .Take (numberOfElements);
Dal tuo codice quindi, sembra che tu stia cercando di fare qualcosa di diverso, vale a dire sommare gli elementi. L'operatore .Sum potrebbe essere di aiuto qui.
|
Non è la risposta che stai cercando? Sfoglia altre domande contrassegnate con c # arrays linq o fai la tua domanda.